#include <iostream>
 
using namespace std;

/**
 * C++ 类 & 对象
*/
 
class Test
{
    private:
        int num = 0;
        // 静态成员
        static int step;
    protected:
        int count = 0;
    public:
        // 构造函数
        Test(){};
        Test(int num, int count);

        // 拷贝构造函数
        Test(const Test &t);

        // 成员函数声明
        int get(void){
            return num;
        };
        void set( int num );
        // 接口（抽象类）、纯虚函数
        // virtual void set(int num) = 0;

        // 友元类和友元函数，可以访问类的 private 和 protected 成员。
        friend class FriendClass;
        friend void FriendMethod(Test t);
};

class FriendClass{
    void print(Test t){
        cout << t.num << endl;
    }
};

void FriendMethod(Test t){
    cout << t.num << endl;
}


// 构造函数定义
Test::Test(int num, int count){
    this->num = num;
    this->count = count;
}
// 拷贝构造函数定义
Test::Test(const Test &t){
    cout << "调用拷贝构造函数 t.num:" << t.num << endl;
}
// 成员函数定义
void Test::set( int num)
{
    this->num = num;
}

void PrintObj(Test t){
    cout << "t.num:" << t.get() << endl;
}

// 内联函数，提高函数调用的效率
inline int Max(int x, int y)
{
   return (x > y)? x : y;
}

int main( )
{
    Test t;
    t.set(55);
    // t.get():55
    cout << "t.get():" << t.get() << endl;

    Test t2 = t; // 调用拷贝构造函数
    PrintObj(t2); // 调用拷贝构造函数

    return 0;
}